<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\exception\UploadException;
use app\common\library\Upload;
use app\common\library\Wechat;
use app\common\model\Area;
use app\common\model\Version;
use fast\Random;
use think\captcha\Captcha;
use think\Config;
use think\Hook;
use app\common\model\banner\Banner;

/**
 * 公共接口
 */
class Common extends Api
{
    protected $noNeedLogin = ['init', 'captcha', 'banner', 'jssdk'];
    protected $noNeedRight = '*';

    public function _initialize()
    {

        if (isset($_SERVER['HTTP_ORIGIN'])) {
            header('Access-Control-Expose-Headers: __token__');//跨域让客户端获取到
        }
        //跨域检测
        check_cors_request();

        if (!isset($_COOKIE['PHPSESSID'])) {
            Config::set('session.id', $this->request->server("HTTP_SID"));
        }
        parent::_initialize();
    }

    /**
     * 加载初始化
     *
     * @param string $version 版本号
     * @param string $lng 经度
     * @param string $lat 纬度
     */
    public function init()
    {
        $this->success('', [
            'name' => config('site.name'),
            'weixin_img' => empty(config('site.weixin_img')) ? '' : cdnurl(config('site.weixin_img'), true),
            'weixin' => config('site.weixin'),
            'home_title' => config('site.home_title'),
            'home_logo' => cdnurl(config('site.home_logo'), true),
            'default_avatar' => cdnurl(config('site.default_avatar'), true),
            'search_keyword' => empty(config('site.search_keyword')) ? [] : explode(",", config('site.search_keyword')),
        ]);
    }


    public function jssdk()
    {
        $wechat = new Wechat();
        $data = $wechat->weixinsdk();
        $data['share_img'] = cdnurl(config('site.share_img'), true);
        $data['share_title'] = config('site.share_title');
        $data['share_desc'] = config('site.share_desc');
        $this->success('获取成功', $data);
    }

    public function captcha($id = "")
    {
        Config::set([
            'captcha' => array_merge(config('captcha'), [
                'fontSize' => 44,
                'imageH' => 150,
                'imageW' => 350,
            ])
        ]);
        $captcha = new Captcha((array)Config::get('captcha'));
        return $captcha->entry($id);
    }

    /**
     * 上传文件
     * @ApiMethod (POST)
     * @param File $file 文件流
     */
    public function upload()
    {
        Config::set('default_return_type', 'json');
        //必须设定cdnurl为空,否则cdnurl函数计算错误
        Config::set('upload.cdnurl', '');
        $chunkid = $this->request->post("chunkid");
        if ($chunkid) {
            if (!Config::get('upload.chunking')) {
                $this->error(__('Chunk file disabled'));
            }
            $action = $this->request->post("action");
            $chunkindex = $this->request->post("chunkindex/d");
            $chunkcount = $this->request->post("chunkcount/d");
            $filename = $this->request->post("filename");
            $method = $this->request->method(true);
            if ($action == 'merge') {
                $attachment = null;
                //合并分片文件
                try {
                    $upload = new Upload();
                    $attachment = $upload->merge($chunkid, $chunkcount, $filename);
                } catch (UploadException $e) {
                    $this->error($e->getMessage());
                }
                $this->success(__('Uploaded successful'), ['url' => $attachment->url, 'fullurl' => cdnurl($attachment->url, true)]);
            } elseif ($method == 'clean') {
                //删除冗余的分片文件
                try {
                    $upload = new Upload();
                    $upload->clean($chunkid);
                } catch (UploadException $e) {
                    $this->error($e->getMessage());
                }
                $this->success();
            } else {
                //上传分片文件
                //默认普通上传文件
                $file = $this->request->file('file');
                try {
                    $upload = new Upload($file);
                    $upload->chunk($chunkid, $chunkindex, $chunkcount);
                } catch (UploadException $e) {
                    $this->error($e->getMessage());
                }
                $this->success();
            }
        } else {
            $attachment = null;
            //默认普通上传文件
            $file = $this->request->file('file');
            try {
                $upload = new Upload($file);
                $attachment = $upload->upload();
            } catch (UploadException $e) {
                $this->error($e->getMessage());
            }

            $this->success(__('Uploaded successful'), ['url' => $attachment->url, 'fullurl' => cdnurl($attachment->url, true)]);
        }

    }


    public function banner($cid)
    {
        $banner = Banner::alias('b')
            ->join('banner_category c', 'c.id = b.cid')
            ->where(['b.status' => 'normal', 'c.status' => 'normal', 'b.cid' => $cid])
            ->field(['b.image', 'b.name'])->order('b.weigh asc')->select();
        $result = [];
        if ($banner) {
            foreach ($banner as $key => $k) {
                $result[$key]['image'] = cdnurl($k['image'], true);
                $result[$key]['name'] = $k['name'];
            }
        }
        $this->success('获取成功', $result);
    }
}
